// @/composables/useLogisticsAction.uni.ts
import { cancelOrderX, delOrder, logisticsCancel } from '@/api/platformOrders/orders/list';

/**
 * uni-app 版本的物流操作 Hook
 * @param {Function} refreshCallback - 操作成功后调用的刷新方法（如 customTableRef.value?.refresh）
 * @returns {{ execute: Function }}
 */
export function useLogisticsAction(refreshCallback) {
	const refresh = refreshCallback || (() => {});

	/**
	 * 执行物流相关操作：拦截、取消发货、删除订单
	 * @param {Object} row - 订单数据对象
	 * @param {'intercept' | 'cancel' | 'delete'} actionType - 操作类型
	 */
	const execute = (row, actionType) => {
		const messages = {
			intercept: {
				title: '拦截物流',
				content: '确定拦截物流吗？如拦截失败，请联系客户拒收。',
				success: '拦截物流指令已发出',
				apiFn: logisticsCancel
			},
			cancel: {
				title: '取消发货',
				content: '确定取消发货吗？',
				success: '取消发货成功',
				apiFn: cancelOrderX
			},
			delete: {
				title: '删除订单',
				content: '确定删除选中的订单吗？此操作不可撤销。',
				success: '订单删除成功',
				apiFn: delOrder
			}
		};

		const config = messages[actionType];

		if (!config) {
			console.warn(`不支持的操作类型: ${actionType}`);
			return;
		}

		const { title, content, success, apiFn } = config;

		// 使用 uni.showModal 替代 ElMessageBox
		uni.showModal({
			title,
			content,
			confirmText: '确定',
			cancelText: '取消',
			confirmColor: '#007AFF', // iOS 风格蓝
			success: (res) => {
				if (res.confirm) {
					// 用户点击确定，调用 API
					apiFn({
						orderId: row.orderId,
						logisticsPlatformCode: row.logisticsPlatformCode,
						logisticsNo: row.logisticsNo,
						shippingType: row.shippingType
					})
						.then(() => {
							// 成功提示
							uni.showToast({
								title: success,
								icon: 'success',
								duration: 2000
							});

							// 刷新列表
							refresh();

							// 可选：返回成功状态给调用方
							// resolve?.()
						})
						.catch((err) => {
							// API 请求失败（网络错误、接口报错等）
							const message = err?.msg || err?.message || '操作失败，请重试';
							uni.showToast({
								title: message,
								icon: 'none',
								duration: 2000
							});
							console.error('物流操作失败:', err);
						});
				} else if (res.cancel) {
					// 用户取消，不做任何事
					// 可以添加埋点或日志
					console.log(`用户取消了【${title}】操作`);
				}
			},
			fail: (err) => {
				// showModal 调用失败（极少发生）
				console.error('弹窗调用失败:', err);
			}
		});
	};

	return {
		execute
	};
}
